<?php

namespace App\Http\Controllers\commodity;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Controllers\main\MainController as main;

use DB;
use Goods;

class GoodsDatalistController extends Controller
{
     /**
     * getList()    显示商品信息列表页
     *  
     * @return      返回商品信息列表视图
     */
    static public function nodatalist()
    {
        $data = DB::table('goods') -> where('goods_status','=','1') -> get();
        return $data;
    }

    public function getAdd()
    {

        // 获取信息不完整的商品
        $config = DB::table('goods_config_cate') -> where('goods_config_sort','=','0') -> get();
        if(empty(self::nodatalist())){
            return redirect('admin/commodity/list') -> with('success','没有需要添加详情的商品,如需更改详情可以点击修改,或添加商品');
        }
        // 跳转到添加详情配置中
        return view('admin/goodsDatalist/add',['data'=>self::nodatalist(),'config'=>$config,'goods_cate'=>main::CateInfo()]);
    }

    /**
     * postDoadd()    进行商品详情添加数据库方法
     * 
     * @param  $res   booler    返回商品基本信息是否插入成功
     * @param  $goods_datalist_pic int  刚刚添加到数据库中商品图片id
     * @param  $goods_config_id    int  刚刚添加到数据库中的商品配置id
     * @param  $goods_config_other int  刚刚添加到数据库中的商品其他配置id
     * @param  $goods_datalist_id  int  刚刚添加导数据库中的商品详情id
     *       
     * @return 如果全部插入成功则返回到商品列表页
     */
    public function postDoadd(Request $request)
    {
        // dd($request->all());
        #######################################添加商品基本信息######################################################
        
        // 获取商品id
        $goods_id = $request -> only('goods_model');
        
        
        // 根据商品id获取到商品名称
        $goods_model = DB::table('goods') -> where('id',$goods_id) -> first()['goods_model'];
        // 商品id
        $goods_id = $goods_id['goods_model'];

        
        // 随机生成商品货号
        $goods_art = time().rand(1000,10000);
        $goods['goods_art'] = $goods_art;
        $goods['goods_model'] = $goods_model;

        // 处理精品推荐和置顶
        if(array_key_exists('goods_stick',$request -> all())) {
            $goods['goods_stick'] = 2;
        }else{
            $goods['goods_stick'] = 1;
        }
        if(array_key_exists('goods_boutique',$request -> all())) {
            $goods['goods_boutique'] = 2;
        }else{
            $goods['goods_boutique'] = 1;
        }
        // 商品标题
        $goods['goods_title'] = $request -> only('goods_title')['goods_title'];
        // 商品详情状态
        $goods['goods_status'] = 2;
        // 进行修改商品基本信息
        $res = DB::table('goods') -> where('id',$goods_id) -> update($goods);
        // 判断商品基本信息是否更改成功,
        if(!$res) {
            return back() -> withInput() -> with('error','商品信息插入失败,请检查商品名称和商品价格和商品所属分类');
        }
        
        ###################################################添加商品图片###################################################################################
        if($request -> hasFile('pic1') && $request -> hasFile('pic2') && $request -> hasFile('pic3') && $request -> hasFile('pic4')){
            

            // 获取文件后缀名
            $suffix = '.'.$request -> file('pic1') ->getClientOriginalExtension();
            // 随机文件名
            $picname1 = time().rand(1000,1000000).$suffix;
            $picname2 = time().rand(1000,1000000).$suffix;
            $picname3 = time().rand(1000,1000000).$suffix;
            $picname4 = time().rand(1000,1000000).$suffix;
            
            // 将上传照片移动到指定文件夹中
            $request->file('pic1')->move('./images/admin/goods_pic', $picname1);

            $request->file('pic2')->move('./images/admin/goods_pic', $picname2);
            $request->file('pic3')->move('./images/admin/goods_pic', $picname3);
            $request->file('pic4')->move('./images/admin/goods_pic', $picname4);
            
        }else{
            return back() -> withInput() -> with('error','请上传商品照片');
        }
        // 将商品图片名称写入数据库中
        $goods_datalist_pic = DB::table('goods_datalist_pic') -> insertGetId(['goods_datalist_pic1'=>$picname1,'goods_datalist_pic2'=>$picname2,'goods_datalist_pic3'=>$picname3,'goods_datalist_pic4'=>$picname4]);
        if(!$goods_datalist_pic && $goods_datalist_pic > 0) {
            return back() -> withInput() -> with('error','图片写入数据库失败');
        }

        ###############################################添加配置详情###########################################################################################
        // 接收配置详情
        $sele = $request -> only('sele')['sele'];

        // dd($sele);
        // 遍历接收的id
        foreach($sele as $key=>$value) {
            // 如果接收到的值为1的话,停止一次
            if($value == 1) {
                continue;
            }
            // 将过滤以后的值放入数组中
            $id[] = $value;
        }
        // 查询数据库
        $data = DB::table('goods_config_cate') 
        // 查询条件为数据库中的主键id等于接收的id
        -> whereIn('id',$id) 
        // 过滤父级id为0的数据
        -> where('goods_config_sort','!=',0) 
        // 去除配置名称和配置字段名称
        -> select('goods_config_cate','goods_config_name') 
        -> get();


        // 遍历数据库中查询到的数据
        foreach($data as $key=>$value) {
            // 将查询到的配置名称字段添加到数组中
            
            $goods_config_cate[] = $value['goods_config_cate'];

            // 将查询到的配置id的数据库字段名称添加到数组中
           
            $goods_config_name[] = $value['goods_config_name'];
        }
        // 合并数组
        $goods_config = array_combine($goods_config_name,$goods_config_cate);
        // dd($goods_config);
        // 将商品配置添加到数据库,并获取到插入的id
        $goods_config_id = DB::table('goods_config_list') ->insertGetId($goods_config);
        // 判断如果商品配置没有插入成功的话的则返回到添加页面
        // if(!$goods_config_id && $goods_config_id > 0) {
        //     return back() -> withInput() -> with('error','添加商品配置失败,请检查商品配置是否正确');
        // }

        #################################################添加商品其他配置############################################################################

        // 获取商品其他配置信息,
        $goods_config_other = $request -> only('goods_config_other_system','goods_config_other_camera_f','goods_config_other_camera_b','goods_config_other_finger','goods_config_other_battery');
        // 将商品其他配置信息插入数据库中
        $goods_config_other = DB::table('goods_config_other') -> insertGetId($goods_config_other);
        if(!$goods_config_other) {
            return back() -> withInput() -> with('error','商品其他配置信息插入数据库失败,请检查商品其他配置信息是否填写');
        }       

        // #############################################添加商品详情############################################################################
        $datalist = $request -> only('datalist');
        // 插入数据库
        $goods_datalist_id = DB::table('goods_datalist') -> insertGetId($datalist);
        if(!$goods_datalist_id && $goods_datalist_id > 0) {
            return back() -> withInput() -> with('error','添加商品详情失败,请检查商品详情信息');
        }

        #############################################将图片,商品,商品配置,商品详情,商品其他配置等id插入到商品配置表中###############################################################################################
        // 将图片id,商品id,商品配置id,商品详情id,商品其他id组成一个数组
        // dd($goods_datalist_pic.$goods_id.$goods_config_id.$goods_config_other.$goods_datalist_id);
        // 接收商品价格
        $goods_price = $request -> only('goods_price')['goods_price'];
        
        $goods_config_arr = array(
                // 图片id
                'goods_datalist_pic' => $goods_datalist_pic,
                // 商品id
                'goods_id' => $goods_id,
                // 商品配置id
                'goods_config_id' => $goods_config_id,
                // 商品其他id
                'goods_config_other' => $goods_config_other,
                // 商品详情id
                'goods_datalist' => $goods_datalist_id,
                // 商品价格
                'goods_price' => $goods_price

                
            );
        $res = DB::table('goods_config') -> insertGetId($goods_config_arr);
        if(!$res) {
            return back() -> withInput() -> with('商品配置添加失败,请重试');
        }
        

        // 接收商品配置id谢若库存表中,并接收商品库存写入库存表中
        $inventory_num = $request -> only('goods_inventory')['goods_inventory'];
        $inventory = array(
                'goods_inventory' => $inventory_num,
                'goods_config' => $res
            );
        $res_inventory = DB::table('goods_inventory') -> insert($inventory);
        if($res_inventory){
            return back() -> withInput() -> with('商品库存配置添加失败,请重试');
        }

        if($res && $goods_datalist_pic && $goods_config_id && $goods_config_other && $goods_datalist_id) {
            return redirect('admin/commodity/list') -> with('success','添加商品详情成功');
        }

    }


    /**
     * getEdit()   修改商品配置页面
     * 
     * @return     返回商品视图
     */
    public function getEdit(Request $request)
    {
        // 接收要修改商品的id
        $id = $request -> only('id')['id'];
        // 根据id进行查找数据库中需要修改的商品信息
        // dd(main::getDatalist($id));
        
        // dd(main::getDatalist($id));
        // $config = DB::table('goods_config_cate') -> where('goods_config_sort','=','0') -> get();
        // dd(main::CateInfo());
        return view('admin.goodsDatalist.edit',['goods_cate'=>main::CateInfo(),'data'=>main::getDatalist($id)]);
    }



    public function postUpdate(Request $request)
    {
        // dd($request -> all());
        ################################修改商品基本信息#####################################
        
        
        
        
        // 获取到商品名称
        $goods_model = $request -> only('goods_model_name')['goods_model_name'];
        // 商品id
        $goods_id = $request -> only('goods_id')['goods_id'];

        //商品货号
        $goods_art = $request -> only('goods_art')['goods_art'];
        // 处理精品推荐和置顶
        if(array_key_exists('goods_stick',$request -> all())) {
            $goods['goods_stick'] = 2;
        }else{
            $goods['goods_stick'] = 1;
        }
        if(array_key_exists('goods_boutique',$request -> all())) {
            $goods['goods_boutique'] = 2;
        }else{
            $goods['goods_boutique'] = 1;
        }
        // 商品详情状态
        $goods['goods_status'] = 2;
        $goods['goods_art'] = $goods_art;
        $goods['goods_model'] = $goods_model;
        
         // 进行修改商品基本信息
        $res = DB::table('goods') -> where('id',$goods_id) -> update($goods);
        // 判断商品基本信息是否更改成功,
        if(!$res) {
            return back() -> withInput() -> with('error','没有修改商品基本信息,如修改请检查商品分类,及商品名称');
        }
        ##############################商品修改图片###########################################
        if($request ->hasFile('pic1')) {
            // 获取文件后缀名
            $suffix = '.'.$request -> file('pic1') ->getClientOriginalExtension();
            $picname1 = time().rand(1000,1000000).$suffix;
            $request->file('pic1')->move('./images/admin/goods_pic', $picname1);
        }else{
            $picname1 = $request -> only('goods_datalist_pic1')['goods_datalist_pic1'];
        }
        if($request -> hasFile('pic2')) {
            // 获取文件后缀名
            $suffix = '.'.$request -> file('pic1') ->getClientOriginalExtension();
            $picname2 = time().rand(1000,1000000).$suffix;
            $request->file('pic1')->move('./images/admin/goods_pic', $picname2);
        }else{
            $picname2 = $request -> only('goods_datalist_pic2')['goods_datalist_pic2'];
        }
        if($request -> hasFile('pic3')) {
            // 获取文件后缀名
            $suffix = '.'.$request -> file('pic13') ->getClientOriginalExtension();
            $picname3 = time().rand(1000,1000000).$suffix;
            $request->file('pic1')->move('./images/admin/goods_pic', $picname3);
        }else{
            $picname3 = $request -> only('goods_datalist_pic3')['goods_datalist_pic3'];
        }
        if($request -> hasFile('pic4')) {
            // 获取文件后缀名
            $suffix = '.'.$request -> file('pic14') ->getClientOriginalExtension();
            $picname3 = time().rand(1000,1000000).$suffix;
            $request->file('pic1')->move('./images/admin/goods_pic', $picname4);
        }else{
            $picname4 = $request -> only('goods_datalist_pic4')['goods_datalist_pic4'];
        }
        
        // 将商品图片名称写入数据库中
        $goods_datalist_pic = DB::table('goods_datalist_pic') -> where('id',$request -> only('goods_config_pic')['goods_config_pic']) -> update(['goods_datalist_pic1'=>$picname1,'goods_datalist_pic2'=>$picname2,'goods_datalist_pic3'=>$picname3,'goods_datalist_pic4'=>$picname4]);
        if(!$goods_datalist_pic && $goods_datalist_pic > 0) {
            return back() -> withInput() -> with('error','图片写入数据库失败');
        }
        // dd($request -> all());
        // ###########################商品详细配置###############################
          // 接收配置详情
        $sele = $request -> only('sele')['sele'];
        $goods_config_id = $request -> only('goods_config_id')['goods_config_id'];
        // 接收商品id
        $goods_id = $request -> only('goods_id')['goods_id'];
        // 接收商品关联配置id
        $goods_config_oldid = $request -> only('id')['id']; 

        // dd($goods_id);
        // 遍历接收的id
        foreach($sele as $key=>$value) {
            // 如果接收到的值为1的话,停止一次
            if($value == 1) {
                continue;
            }
            // 将过滤以后的值放入数组中
            $id[] = $value;
        }
        // 判断用户是否更改配置
        if(!empty($id)) {
            $data_list = DB::table('goods_config_list') -> where('id',$goods_config_id) -> first();
            // dd($data_list);
             // 查询数据库
            $data = DB::table('goods_config_cate') 
            // 查询条件为数据库中的主键id不等于接收的id
            -> whereIn('id',$id) 
            // 过滤父级id为0的数据
            -> where('goods_config_sort','!=',0) 
            // 去除配置名称和配置字段名称
            -> select('goods_config_cate','goods_config_name') 
            -> get();


            // 遍历数据库中查询到的数据
            foreach($data as $key=>$value) {
                // 将查询到的配置名称字段添加到数组中
                $goods_config_cate[] = $value['goods_config_cate'];
                // 将查询到的配置id的数据库字段名称添加到数组中
                $goods_config_name[] = $value['goods_config_name'];
            }
            // 合并数组
            
            
            $goods_config = array_combine($goods_config_name,$goods_config_cate);
            // dd($data_list);
            // dd($goods_config);
            foreach($goods_config as $k=>$v) {
                $data_list[$k] = $v;
            }

            // dd($data);
            // 将商品配置添加到数据库,并获取到插入的id
            $res = DB::table('goods_config_list') -> where('id',$request -> only('goods_config_id')['goods_config_id']) -> update($data_list);
            // 判断如果商品配置没有插入成功的话的则返回到添加页面
            if(!$res) {
                return back() -> withInput() -> with('error','修改商品配置失败,请检查商品配置是否正确');
            }
            
        }

        // ##################################商品其他配置#################################################
        // 获取商品其他配置信息,
        $goods_config_other = $request -> only('goods_config_other_system','goods_config_other_camera_f','goods_config_other_camera_b','goods_config_other_finger','goods_config_other_battery');
        // 将商品其他配置信息插入数据库中
        ;
        // dd($goods_config_other);
        $goods_config_other = DB::table('goods_config_other') -> where('id',$request -> only('goods_other_id')['goods_other_id']) -> update($goods_config_other);
        if(!$goods_config_other) {
            return back() -> withInput() -> with('error','商品其他配置信息插入数据库失败,请检查商品其他配置信息是否填写');
        }

        #####################################修改商品详情##############################################
        $datalist = $request -> only('datalist');
        
        $res = DB::table('goods_datalist') -> where('id',$request -> only('goods_datalist')['goods_datalist']) -> update($datalist);
        
        // 修改库存
        $goods_inventory = $request -> only('goods_inventory')['goods_inventory'];
        $inventory = array(
            'goods_inventory' => $goods_inventory,
            'goods_color' => '',
            'goods_config' => $request -> only('id')['id']
            );
        $inventory_res = DB::table('goods_inventory') -> where('id',$request -> only('inventory_id')['inventory_id']) -> update($inventory);
        if(!$inventory_res){
            return back() -> withInput() -> with('error','修改商品库存失败');
        }

    }

    /**
    * getAjax()   接收无限极联动传值,根据id进行查询是否有子级
    *
    * @param      $id  int  接收到多级联动传来的id
    * 
    * @return     返回给ajax查询到的子类
    */
    public function getAjax()
    {

        $id = $_GET['id'];
        
        if($id == 0) {
            $id = 1;
        }

        $data = DB::table('goods_config_cate') -> where('goods_config_sort',$id) -> get();
        echo json_encode($data); 
    }


}
